#ifndef WINIMEHANDLER_H
#define WINIMEHANDLER_H

#include <QObject>
#include <QVector>
#include <QString>
#include <windows.h>
#include <imm.h>
#include "inputcontext.h"  // 引入输入核心逻辑

// IME 候选词结构（适配系统要求）
struct WinIMECandidate {
    QString text;       // 候选词文本
    DWORD index;        // 系统候选词索引
};

class WinIMEHandler : public QObject {
    Q_OBJECT
public:
    explicit WinIMEHandler(InputContext* inputCtx, QObject* parent = nullptr);
    ~WinIMEHandler() override;

    // 注册IME到系统
    bool registerIME(const QString& imeName, const QString& imePath);
    // 卸载IME（用于测试/卸载）
    bool unregisterIME(const QString& imePath);
    // 设置当前激活的输入窗口
    void setActiveWindow(HWND hwnd);

signals:
    // 向InputContext转发系统键盘事件
    void systemKeyEvent(QKeyEvent* event);
    // 通知InputContext候选词已被系统选中
    void candidateSelectedBySystem(int index);

public slots:
    // 接收InputContext生成的候选词，同步到系统IME
    void onCandidatesUpdated(const QVector<PinyinCandidate>& candidates);
    // 接收InputContext的输入状态变更（中英文/简繁），更新系统IME状态
    void onInputStateChanged(const InputState& state);

private:
    // IME 回调函数（静态，适配imm32.dll要求）
    static LRESULT CALLBACK IMEProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    // 处理IME的候选词请求
    void handleCandidateRequest(HIMC himc, LPARAM lParam);
    // 处理系统键盘事件，转换为Qt KeyEvent
    void processSystemKeyEvent(HIMC himc, WPARAM wParam, LPARAM lParam);
    // 同步输入文本到系统输入框
    void syncCompositionTextToSystem(HIMC himc, const QString& text);

    InputContext* m_inputCtx;       // 关联的输入核心
    HWND m_activeHwnd;              // 当前激活的系统窗口句柄
    HIMC m_imeContext;              // IME输入上下文
    QVector<WinIMECandidate> m_systemCandidates;  // 系统候选词缓存
    bool m_isChineseMode;           // 当前IME是否为中文模式
    static WinIMEHandler* m_instance;  // 静态实例（用于回调函数访问）
};

#endif  // WINIMEHANDLER_H